home *** CD-ROM | disk | FTP | other *** search
/ Aminet 8 / Aminet 8 (1995)(GTI - Schatztruhe)[!][Oct 1995].iso / Aminet / util / cli / vAvail.lha / vAvail / vAvail.c < prev    next >
C/C++ Source or Header  |  1995-09-06  |  4KB  |  145 lines

  1. /*
  2.  *  $VER:vAvail.c 2.0 (06.09.95) 10:06:37 Copyright © 1995 by Sylvain ROUGIER
  3.  *
  4.  *  Created:    19 Jun 1995  14:19:05
  5.  *  Modified:    06 Sep 1995    10:06:03
  6.  *
  7.  *  Make>> sc <file>.c
  8.  *  Make>> slink LIB:cs.o <file>.o SmallCode SmallData BATCH NOICONS TO <file> LIB LIB:c.lib
  9.  *
  10.  * 
  11.  */
  12.  
  13. #include <clib.h>
  14.  
  15. #include <VMM_Stat.h>
  16. #include <libraries/VMem.h>
  17. #include <proto/VMem.h>
  18.  
  19. // Startup Modules...
  20. CliArgs; ParseToolTypes; 
  21.  
  22. char *Template = "CHIP/S,FAST/S,VMM/S,GigaMem/S,TOTAL/S,FLUSH/S";
  23. char *CliHelp;
  24.  
  25. enum ARG_ { ARG_Chip = 0, ARG_Fast, ARG_VMM, ARG_GigaMem, ARG_Total, ARG_Flush};
  26.  
  27. #define MEMF_PHYS    MEMF_PUBLIC
  28.  
  29. char *VersTag = "$VER:vAvail 2.0 (19.06.95) 17:54:20 Copyright © 1995 by Sylvain ROUGIER";
  30.  
  31. long Main( char *ArgV[], struct WBStartup *WBenchMsg)
  32. {
  33.     ULONG AvailChip = 0;
  34.     ULONG MaximumChip = 0;
  35.     ULONG LargestChip = 0;
  36.  
  37.     ULONG AvailFast = 0;
  38.     ULONG MaximumFast = 0;
  39.     ULONG LargestFast = 0;
  40.  
  41.     ULONG AvailVMM = 0;
  42.     ULONG MaximumVMM = 0;
  43.     ULONG LargestVMM = 0;
  44.  
  45.     ULONG AvailGigaMem = 0;
  46.     ULONG MaximumGigaMem = 0;
  47.     ULONG LargestGigaMem = 0;
  48.  
  49.     ULONG AvailTotal = 0;
  50.     ULONG MaximumTotal = 0;
  51.     ULONG LargestTotal = 0;
  52.  
  53.     if ( ArgV[ ARG_Flush])
  54.     {
  55.         UBYTE *Mem;
  56.         if ( Mem = AllocVec( 0x7FFFFFFF, MEMF_ANY))
  57.             FreeVec( Mem);
  58.     }
  59.  
  60.     AvailChip = AvailMem( MEMF_CHIP);
  61.     MaximumChip = AvailMem( MEMF_CHIP|MEMF_TOTAL);
  62.     LargestChip = AvailMem( MEMF_CHIP|MEMF_LARGEST);
  63.  
  64.     AvailFast = AvailMem( MEMF_FAST|MEMF_PHYS);
  65.     MaximumFast = AvailMem( MEMF_FAST|MEMF_PHYS|MEMF_TOTAL);
  66.     LargestFast = AvailMem( MEMF_FAST|MEMF_PHYS|MEMF_LARGEST);
  67.  
  68.     AvailTotal = AvailMem( MEMF_ANY);
  69.     MaximumTotal = AvailMem( MEMF_ANY|MEMF_TOTAL);
  70.     LargestTotal = AvailMem( MEMF_ANY|MEMF_LARGEST);
  71.  
  72.     // VMM suport
  73.     {
  74.         struct VMStatMsg *VMStatMsg;
  75.         LONG VMSignal;
  76.         struct MsgPort *VMPort;
  77.  
  78.         if ( VMStatMsg = AllocVec( sizeof( struct VMStatMsg), MEMF_PUBLIC))
  79.         {
  80.             if ( -1L != ( VMSignal = AllocSignal( -1L)))
  81.             {
  82.                 VMStatMsg->VMMessage.mn_Length = sizeof( struct VMStatMsg);
  83.                  VMStatMsg->Sender      = FindTask( NULL);
  84.                 VMStatMsg->Command     = VMCMD_AskStat;
  85.                 VMStatMsg->ReplySignal = VMSignal;
  86.  
  87.                 Forbid();
  88.                 if( VMPort = FindPort( "VMM_Port"))
  89.                     PutMsg( VMPort, (struct Message*)VMStatMsg);
  90.                 else
  91.                     ;
  92.                 Permit();
  93.  
  94.                 if ( VMPort)
  95.                 {
  96.                     Wait (1L << VMSignal);
  97.                     // Now VMStat are filled with right info.
  98.                     AvailVMM = VMStatMsg->VMFree;
  99.                     MaximumVMM = VMStatMsg->VMSize;
  100.                     LargestVMM = AvailVMM;    // no way to find it
  101.                 }
  102.                 FreeSignal( VMSignal);
  103.             }
  104.             FreeVec( VMStatMsg);
  105.         }
  106.     }
  107.  
  108.     //GigaMem support
  109.     {
  110.         struct Library *VMemBase;
  111.  
  112.         if ( VMemBase = OpenLibrary( "vmem.library", 0))
  113.         {
  114.             AvailGigaMem = VMAvailMem( 0,0);
  115.  
  116.             CloseLibrary( VMemBase);
  117.         }
  118.     }
  119.     if ( ArgV[ ARG_Chip])
  120.         Printf( "%lu\n", AvailChip);
  121.     else if ( ArgV[ ARG_Fast])
  122.         Printf( "%lu\n", AvailFast);
  123.     else if ( ArgV[ ARG_VMM])
  124.         Printf( "%lu\n", AvailVMM);
  125.     else if ( ArgV[ ARG_GigaMem])
  126.         Printf( "%lu\n", AvailGigaMem);
  127.     else if ( ArgV[ ARG_Total])
  128.         Printf( "%lu\n", AvailTotal);
  129.     else
  130.     {
  131.         Printf( "Type     Available       In-Use      Maximum      Largest\n");
  132.         //Printf( "Fast   %l11U  %l11U  %l11U  %l11U\n", 111222333L, 111222L, 333222111L, 0L);
  133.         Printf( "Chip   %l11U  %l11U  %l11U  %l11U\n", AvailChip, MaximumChip - AvailChip, MaximumChip, LargestChip);
  134.         Printf( "Fast   %l11U  %l11U  %l11U  %l11U\n", AvailFast, MaximumFast - AvailFast, MaximumFast, LargestFast);
  135.         if ( MaximumVMM > 0)
  136.             Printf( "VMM    %l11U  %l11U  %l11U  %l11U\n", AvailVMM, MaximumVMM - AvailVMM, MaximumVMM, LargestVMM);
  137.         if ( MaximumGigaMem > 0)
  138.             Printf( "GM     %l11U  %l11U  %l11U  %l11U\n", AvailGigaMem, MaximumGigaMem - AvailGigaMem, MaximumGigaMem, LargestGigaMem);
  139.         Printf( "Total  %l11U  %l11U  %l11U  %l11U\n", AvailTotal, MaximumTotal - AvailTotal, MaximumTotal, LargestTotal);
  140.     }
  141.  
  142.     return 0;
  143. }
  144.  
  145.